home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / src / amitcp / netinet / tcp_debug.c < prev    next >
C/C++ Source or Header  |  1993-12-22  |  8KB  |  242 lines

  1. RCS_ID_C="$Id: tcp_debug.c,v 1.10 1993/12/21 22:17:22 jraja Exp $";
  2. /*
  3.  * Copyright (c) 1993 AmiTCP/IP Group, <amitcp-group@hut.fi>,
  4.  *                    Helsinki University of Technology, Finland.
  5.  *                    All rights reserved.
  6.  *
  7.  * HISTORY
  8.  * $Log: tcp_debug.c,v $
  9.  * Revision 1.10  1993/12/21  22:17:22  jraja
  10.  * Added one 'const' to avoid warnings...
  11.  *
  12.  * Revision 1.9  1993/06/04  11:16:15  jraja
  13.  * Fixes for first public release.
  14.  *
  15.  * Revision 1.8  1993/05/17  00:16:44  ppessi
  16.  * Changed RCS version. Added rcsid.
  17.  *
  18.  * Revision 1.7  1993/04/05  19:06:24  jraja
  19.  * Changed storage of the spl functions  return values to type spl_t.
  20.  * Added include for conf.h to every .c file.
  21.  *
  22.  * Revision 1.6  93/03/22  16:59:34  16:59:34  jraja (Jarno Tapio Rajahalme)
  23.  * Changed bcopy()s and bzero()s with word aligned pointers to
  24.  * aligned_b(copy|zero) ar aligned_b(copy|zero)_const. The latter is for calls
  25.  * in which the size is constant.
  26.  * These can be disabled by defining NOALIGN.
  27.  *  Converted bcopys doing structure copies (on aligned pointers) to structure
  28.  * assignments, since at least SASC produces better code with assignment.
  29.  * 
  30.  * Revision 1.5  93/03/13  17:14:23  17:14:23  ppessi (Pekka Pessi)
  31.  * Fixed bugs with variable initialization.
  32.  * 
  33.  * Revision 1.4  93/03/03  21:29:59  21:29:59  jraja (Jarno Tapio Rajahalme)
  34.  * Moved various data definitions from header files to here.
  35.  * 
  36.  * Revision 1.3  93/03/02  19:02:22  19:02:22  too (Tomi Ollila)
  37.  * Changed %? to %l? on format strings
  38.  * 
  39.  * Revision 1.2  93/02/26  09:29:59  09:29:59  jraja (Jarno Tapio Rajahalme)
  40.  * Made this compile with ANSI C (added prototypes).
  41.  * Made one structure copy to explicitly use bcopy to be able to use inline
  42.  * bcopy().
  43.  * Changed old style string concat / ** / to ansi ##.
  44.  * 
  45.  * Revision 1.1  92/11/17  16:30:11  16:30:11  jraja (Jarno Tapio Rajahalme)
  46.  * Initial revision
  47.  *
  48.  */
  49.  
  50. /*
  51.  * Copyright (c) 1982, 1986 Regents of the University of California.
  52.  * All rights reserved.
  53.  *
  54.  * Redistribution and use in source and binary forms, with or without
  55.  * modification, are permitted provided that the following conditions
  56.  * are met:
  57.  * 1. Redistributions of source code must retain the above copyright
  58.  *    notice, this list of conditions and the following disclaimer.
  59.  * 2. Redistributions in binary form must reproduce the above copyright
  60.  *    notice, this list of conditions and the following disclaimer in the
  61.  *    documentation and/or other materials provided with the distribution.
  62.  * 3. All advertising materials mentioning features or use of this software
  63.  *    must display the following acknowledgement:
  64.  *    This product includes software developed by the University of
  65.  *    California, Berkeley and its contributors.
  66.  * 4. Neither the name of the University nor the names of its contributors
  67.  *    may be used to endorse or promote products derived from this software
  68.  *    without specific prior written permission.
  69.  *
  70.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  71.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  72.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  73.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  74.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  75.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  76.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  77.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  78.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  79.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  80.  * SUCH DAMAGE.
  81.  *
  82.  *    @(#)tcp_debug.c    7.6 (Berkeley) 6/28/90
  83.  */
  84.  
  85. #ifdef TCPDEBUG
  86. /* load symbolic names */
  87. #define PRUREQUESTS
  88. #define TCPSTATES
  89. #define    TCPTIMERS
  90. #define    TANAMES
  91. #endif
  92.  
  93. #include <conf.h>
  94.  
  95. #include <sys/param.h>
  96. #include <sys/systm.h>
  97. #include <sys/mbuf.h>
  98. #include <sys/socket.h>
  99. #include <sys/socketvar.h>
  100. #include <sys/protosw.h>
  101. #include <sys/errno.h>
  102.  
  103. #include <net/route.h>
  104. #include <net/if.h>
  105.  
  106. #include <netinet/in.h>
  107. #include <netinet/in_systm.h>
  108. #include <netinet/ip.h>
  109. #include <netinet/in_pcb.h>
  110. #include <netinet/ip_var.h>
  111. #include <netinet/tcp.h>
  112. #include <netinet/tcp_fsm.h>
  113. #include <netinet/tcp_seq.h>
  114. #include <netinet/tcp_timer.h>
  115. #include <netinet/tcp_var.h>
  116. #include <netinet/tcpip.h>
  117. #include <netinet/tcp_debug.h>
  118.  
  119. #include <netinet/tcp_debug_protos.h>
  120.  
  121. /* --- start moved from tcp_debug.h --- */
  122. struct    tcp_debug tcp_debug[TCP_NDEBUG] = {0};
  123. int    tcp_debx = 0; 
  124.  
  125. #ifdef TCPDEBUG
  126. char    *tanames[] =
  127.     { "input", "output", "user", "respond", "drop" };
  128. /* --- end moved from tcp_debug.h --- */
  129. /* --- start moved from sys/protosw.h --- */
  130. char *prurequests[] = {
  131.     "ATTACH",    "DETACH",    "BIND",        "LISTEN",
  132.     "CONNECT",    "ACCEPT",    "DISCONNECT",    "SHUTDOWN",
  133.     "RCVD",        "SEND",        "ABORT",    "CONTROL",
  134.     "SENSE",    "RCVOOB",    "SENDOOB",    "SOCKADDR",
  135.     "PEERADDR",    "CONNECT2",    "FASTTIMO",    "SLOWTIMO",
  136.     "PROTORCV",    "PROTOSEND"
  137. };
  138. /* --- end moved from sys/protosw.h --- */
  139. /* --- start moved from netinet/tcp_timers.h --- */
  140. char *tcptimers[] =
  141.     { "REXMT", "PERSIST", "KEEP", "2MSL" };
  142. /* --- end moved from netinet/tcp_timers.h --- */
  143. /* --- start moved from tcp_fsm.h --- */
  144. char *tcpstates[] = {
  145.     "CLOSED",    "LISTEN",    "SYN_SENT",    "SYN_RCVD",
  146.     "ESTABLISHED",    "CLOSE_WAIT",    "FIN_WAIT_1",    "CLOSING",
  147.     "LAST_ACK",    "FIN_WAIT_2",    "TIME_WAIT",
  148. };
  149. /* --- end moved from tcp_fsm.h --- */
  150. int    tcpconsdebug = 0;
  151. #endif
  152.  
  153. /*
  154.  * Tcp debug routines
  155.  */
  156. void
  157. tcp_trace(act, ostate, tp, ti, req)
  158.     short act, ostate;
  159.     struct tcpcb *tp;
  160.     struct tcpiphdr *ti;
  161.     int req;
  162. {
  163.     tcp_seq seq, ack;
  164.     int len, flags;
  165.     struct tcp_debug *td = &tcp_debug[tcp_debx++];
  166.  
  167.     if (tcp_debx == TCP_NDEBUG)
  168.         tcp_debx = 0;
  169.     td->td_time = iptime();
  170.     td->td_act = act;
  171.     td->td_ostate = ostate;
  172.     td->td_tcb = (caddr_t)tp;
  173.     if (tp)
  174.         td->td_cb = *tp;
  175.     else
  176.         aligned_bzero_const((caddr_t)&td->td_cb, sizeof (*tp));
  177.     if (ti)
  178.         td->td_ti = *ti;
  179.     else
  180.         aligned_bzero_const((caddr_t)&td->td_ti, sizeof (*ti));
  181.     td->td_req = req;
  182. #ifdef TCPDEBUG
  183.     if (tcpconsdebug == 0)
  184.         return;
  185.     if (tp)
  186.         printf("%lx %s:", (u_long)tp, tcpstates[ostate]);
  187.     else
  188.         printf("???????? ");
  189.     printf("%s ", tanames[act]);
  190.     switch (act) {
  191.  
  192.     case TA_INPUT:
  193.     case TA_OUTPUT:
  194.     case TA_DROP:
  195.         if (ti == 0)
  196.             break;
  197.         seq = ti->ti_seq;
  198.         ack = ti->ti_ack;
  199.         len = ti->ti_len;
  200.         if (act == TA_OUTPUT) {
  201.             seq = ntohl(seq);
  202.             ack = ntohl(ack);
  203.             len = ntohs((u_short)len);
  204.         }
  205.         if (act == TA_OUTPUT)
  206.             len -= sizeof (struct tcphdr);
  207.         if (len)
  208.             printf("[%lx..%lx)", seq, seq+len);
  209.         else
  210.             printf("%lx", seq);
  211.         printf("@%lx, urp=%lx", ack, ti->ti_urp);
  212.         flags = ti->ti_flags;
  213.         if (flags) {
  214. #ifndef lint
  215.             const char *cp = "<";
  216. #define pf(f) { if (ti->ti_flags&TH_##f) { printf("%s%s", cp, "f"); cp = ","; } }
  217.             pf(SYN); pf(ACK); pf(FIN); pf(RST); pf(PUSH); pf(URG);
  218. #endif
  219.             printf(">");
  220.         }
  221.         break;
  222.  
  223.     case TA_USER:
  224.         printf("%s", prurequests[req&0xff]);
  225.         if ((req & 0xff) == PRU_SLOWTIMO)
  226.             printf("<%s>", tcptimers[req>>8]);
  227.         break;
  228.     }
  229.     if (tp)
  230.         printf(" -> %s", tcpstates[tp->t_state]);
  231.     /* print out internal state of tp !?! */
  232.     printf("\n");
  233.     if (tp == 0)
  234.         return;
  235.     printf("\trcv_(nxt,wnd,up) (%lx,%lx,%lx) snd_(una,nxt,max) (%lx,%lx,%lx)\n",
  236.         tp->rcv_nxt, tp->rcv_wnd, tp->rcv_up, tp->snd_una, tp->snd_nxt,
  237.         tp->snd_max);
  238.     printf("\tsnd_(wl1,wl2,wnd) (%lx,%lx,%lx)\n",
  239.         tp->snd_wl1, tp->snd_wl2, tp->snd_wnd);
  240. #endif /* TCPDEBUG */
  241. }
  242.